<?php

namespace Lazzaroni\UsuarioBundle\Entity;

use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @UniqueEntity(fields = {"email", "username"})
 * @ORM\Entity(repositoryClass="Lazzaroni\UsuarioBundle\Entity\UsuarioRepository")
 * @ORM\Table(name="Usuario")
 */
class Usuario implements UserInterface
{
    /**
     * Método requerido por la interfaz UserInterface
     */
    public function eraseCredentials()
    {
    }

    /**
     * Método requerido por la interfaz UserInterface
     */
    public function getRoles()
    {
        return array('ROLE_USUARIO');
    }

     /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $nombre
     *
     * @ORM\Column(name="nombre", type="string", length=100)
     *  @Assert\NotBlank()
     */
    private $nombres;

    /**
     * @var string $username
     *
     * @ORM\Column(name="username", type="string", length=100, unique=true)
     *  @Assert\NotBlank()
     */
    private $username;

     /**
     * @var string $nacionalidad
     *
     * @ORM\Column(name="nacionalidad", type="string", length=100)
     * 
      * @Assert\NotBlank()
     */
    private $nacionalidad;

    /**
     * @var string $apellidos
     *
     * @ORM\Column(name="apellidos", type="string", length=255)
     *  @Assert\NotBlank()
     */
    private $apellidos;

    /**
     * @var string $email
     *
     * @ORM\Column(name="email", type="string", length=255, unique=true)
     *  @Assert\Email()
     */
    private $email;

    /**
     * @var string $password
     *
     * @ORM\Column(name="password", type="string", length=255)
     *  @Assert\NotBlank(groups={"registro"})
     *  @Assert\Length(min = 6)
     */
    private $password;

    /**
     * @var string salt
     *
     * @ORM\Column(name="salt", type="string", length=255)
     */
    protected $salt;

    /**
     * @var datetime $fecha_alta
     *
     * @ORM\Column(name="fecha_alta", type="datetime", nullable=true)
     * @Assert\Date()
     */
    private $fecha_alta;

    /**
     * @var datetime $ultima_conexion
     *
     * @ORM\Column(name="ultima_conexion", type="datetime")
     *  @Assert\Date()
     */
    private $ultima_conexion;

    /**
     * @var string $sexo
     *
     * @ORM\Column(name="sexo", type="string")
     * @Assert\NotBlank()
     */
    private $sexo;

    /**
     * @var string $estado
     *
     * @ORM\Column(name="estado", type="string")
     * @Assert\NotBlank()
     */
    private $estado;    
     
    /**
     * @ORM\OneToMany(targetEntity="Lazzaroni\PartituraBundle\Entity\Partitura", mappedBy="propietario")
     * @var Collection
     */
    private $partiturasPropias;
    
    /**
     * 
     * @var ArrayCollection $partiturasFavoritas
     * 
     * @ORM\ManyToMany(targetEntity="Lazzaroni\PartituraBundle\Entity\Partitura")
     * @ORM\JoinTable(name="partituras_favoritas",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="partitura_id", referencedColumnName="id")}
     *      )
     */
    protected $partiturasFavoritas;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nombre
     *
     * @param string $nombre
     */
    public function setNombres($nombre)
    {
        $this->nombres = $nombre;
    }

    /**
     * Get nombre
     *
     * @return string
     */
    public function getNombres()
    {
        return $this->nombres;
    }

    /**
     * Set nacionalidad
     *
     * @param string $nacionalidad
     */
    public function setNacionalidad($nacionalidad)
    {
        $this->nacionalidad = $nacionalidad;
    }

    /**
     * Get nacionalidad
     *
     * @return string
     */
    public function getNacionalidad()
    {
        return $this->nacionalidad;
    }

    /**
     * Set apellidos
     *
     * @param string $apellidos
     */
    public function setApellidos($apellidos)
    {
        $this->apellidos = $apellidos;
    }

    /**
     * Get apellidos
     *
     * @return string
     */
    public function getApellidos()
    {
        return $this->apellidos;
    }

    /**
     * Set email
     *
     * @param string $email
     */
    public function setEmail($email)
    {
        $this->email = $email;
    }

    /**
     * Get email
     *
     * @return string
     */
    public function getEmail()
    {
        return $this->email;
    }

    
    /**
     * Set password
     *
     * @param string $password
     */
    public function setPassword($password)
    {
        $this->password = $password;
    }

    /**
     * Get password
     *
     * @return string
     */
    public function getPassword()
    {
        return $this->password;
    }

    /**
     * Set salt
     *
     * @param string $salt
     */
    public function setSalt($salt)
    {
        $this->salt = $salt;
    }

    /**
     * Get salt
     *
     * @return string
     */
    public function getSalt()
    {
        return $this->salt;
    }


    /**
     * Set ultima_conexion
     *
     * @param datetime $uc
     */
    public function setUltimaConexion($uc)
    {
        $this->ultima_conexion = $uc;
    }

    /**
     * Get fecha_alta
     *
     * @return datetime
     */
    public function getFechaAlta()
    {
        return $this->fecha_alta;
    }

    /**
     * Set fecha_alta
     *
     * @param datetime $fechaAlta
     */
    public function setFechaAlta($fechaAlta)
    {
        $this->fecha_alta = $fechaAlta;
    }

    /**
     * Get ultima_conexion
     *
     * @return datetime
     */
    public function getUltimaConexion()
    {
        return $this->ultima_conexion;
    }

    /**
     * Set sexo
     *
     * @param string $sexo
     */
    public function setSexo($sexo)
    {
        $this->sexo = $sexo;
    }

    /**
     * Get sexo
     *
     * @return string
     */
    public function getSexo()
    {
        return $this->sexo;
    }


    public function __construct() {
        $this->partiturasPropias = new ArrayCollection();
        $this->partiturasFavoritas = new ArrayCollection();
        $this->estado= "publicada";
    }    

    public function __toString()
    {
        return "".getId()." ".getNombres()." ".getApellidos();
    }


    /**
     * Set username
     *
     * @param string $username
     * @return Usuario
     */
    public function setUsername($username)
    {
        $this->username = $username;

        return $this;
    }

    /**
     * Get username
     *
     * @return string 
     */
    public function getUsername()
    {
        return $this->username;
    }


    /**
     * Add partiturasPropias
     *
     * @param Array de Partituras $partiturasPropias
     * @return Usuario
     */
    public function addPartiturasPropias($partiturasPropias)
    {
        $this->partiturasPropias = $partiturasPropias;

        return $this;
    }

    /**
     * Get partiturasPropias
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getPartiturasPropias()
    {
        return $this->partiturasPropias;
    }

    /**
     * Set estado
     *
     * @param string $estado
     * @return Usuario
     */
    public function setEstado($estado)
    {
        $this->estado = $estado;

        return $this;
    }

    /**
     * Get estado
     *
     * @return string 
     */
    public function getEstado()
    {
        return $this->estado;
    }

    /**
     * Add partiturasPropias
     *
     * @param \Lazzaroni\PartituraBundle\Entity\Partitura $partiturasPropias
     * @return Usuario
     */
    public function addPartiturasPropia(\Lazzaroni\PartituraBundle\Entity\Partitura $partiturasPropias)
    {
        $this->partiturasPropias[] = $partiturasPropias;

        return $this;
    }

    /**
     * Remove partiturasPropias
     *
     * @param \Lazzaroni\PartituraBundle\Entity\Partitura $partiturasPropias
     */
    public function removePartiturasPropia(\Lazzaroni\PartituraBundle\Entity\Partitura $partiturasPropias)
    {
        $this->partiturasPropias->removeElement($partiturasPropias);
    }

    /**
     * Add partiturasFavoritas
     *
     * @param \Lazzaroni\PartituraBundle\Entity\Partitura $partiturasFavoritas
     * @return Usuario
     */
    public function addPartiturasFavorita(\Lazzaroni\PartituraBundle\Entity\Partitura $partiturasFavoritas)
    {
        $this->partiturasFavoritas[] = $partiturasFavoritas;

        return $this;
    }

    /**
     * Remove partiturasFavoritas
     *
     * @param \Lazzaroni\PartituraBundle\Entity\Partitura $partiturasFavoritas
     */
    public function removePartiturasFavorita(\Lazzaroni\PartituraBundle\Entity\Partitura $partiturasFavoritas)
    {
        $this->partiturasFavoritas->removeElement($partiturasFavoritas);
    }

    /**
     * Get partiturasFavoritas
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getPartiturasFavoritas()
    {
        return $this->partiturasFavoritas;
    }
}
